A remote desktop allows applications, e.g., drawing or graphics applications, to be run remotely on a server and displayed locally at a client. Information shown on the client's display may be controlled with a pointing device, such as a mouse, a joystick, a touch pad, etc. For example, a user at a client may use a mouse to move a cursor in a display window. The cursor position information is streamed from the client to a server (remote host) via a network. The server processes the cursor position information and sends a response to the client to update the client's display.
The network between the server and the client carries cursor position information between the server and the client. Generally, the cursor position information is itself relatively small, only a few bytes for every position update. Nevertheless, the cursor position information is flushed to the network quite regularly. This regular information transfer introduces significant bandwidth overhead, since the transfer of every new cursor position requires a transport layer packet with a minimum size (e.g., 40 bytes for a transmission control protocol (TCP) packet). Emitting one TCP packet for every position update can be a waste of network bandwidth. Some current systems allow the transmission of the TCP packet be delayed when the network is congested. However, since human eyes are sensitive to lag, low latency is generally desirable in remote desktop systems.